package com.etc.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKDynamicProxy implements InvocationHandler {
    // 句柄： 欢迎，xxxx
    // 刀柄 + 刀刃（） ==> 各种刀
    // 执行句柄：  每次执行的时候都会调用的 共同的部分

    ITarget target;

    public JDKDynamicProxy(ITarget target) {
        this.target = target;
    }

    public JDKDynamicProxy() {
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object o = null;
        try {
            System.out.println("---befor 加1块-----");
            // 执行下去
//            target.aaa(args);
//            target.bbb(args);
            o = method.invoke(target, args);
            System.out.println("---after 加1块-----");
        } catch (Exception e) {
            System.out.println("---exception 加1块-----");
        } finally {
            System.out.println("---finally 加1块-----");
        }
        return o;
    }

    public ITarget newInstance() {
        return (ITarget) Proxy.newProxyInstance(JDKDynamicProxy.class.getClassLoader(), new Class[]{ITarget.class}, this);
    }
}
